#pragma once
#include <exception>
#include <string>

namespace timeout_manager {

/**
 * 超时异常类
 * 当任务执行超时时抛出此异常
 */
class TimeoutException : public std::exception {
public:
    // 构造函数：接受错误消息
    explicit TimeoutException(const std::string& message) 
        : message_(message) {}
    
    // 返回异常信息
    // noexcept表示这个函数不会抛出异常
    const char* what() const noexcept override { 
        return message_.c_str(); 
    }

private:
    std::string message_;  // 存储错误消息
};

/**
 * 任务句柄类
 * 用于标识和操作任务
 */
class TaskHandle {
public:
    // 构造函数：接受任务ID
    explicit TaskHandle(uint64_t id) : task_id_(id) {}
    
    // 获取任务ID
    uint64_t getId() const { return task_id_; }
    
    // 支持比较操作（用于在容器中查找）
    bool operator==(const TaskHandle& other) const {
        return task_id_ == other.task_id_;
    }
    
private:
    uint64_t task_id_;  // 唯一的任务标识符
};

} // namespace timeout_manager